package com.itany.corejava.code17_设计模式.模板模式;

import java.util.Arrays;

/**
 * @author MissChen
 * @date 2024年03月27日 10:33
 */
public abstract class SortUtil {
    public static void main(String[] args) {
        int[] arr={11,23,7,6,19,2,4,1};
        SortUtilDesc desc=new SortUtilDesc();
        int[] newArr=desc.sort(arr);
        System.out.println(Arrays.toString(newArr));
    }

    public int[] sort(int[] arr) {
        // 4个元素
        // 比较3轮
        // 1    3次
        // 2    2次
        // 3    1次
        //先制定一个顶层逻辑架构
        for (int i = 1; i < arr.length; i++) {//外层循环控制比较的轮数
            for (int j = 0; j < arr.length - i; j++) {//内层循环控制每轮比较的次数

                //将具体的实现细节留给具体的方法调用者进行实现
                // 对于这个位置的排序而言，唯一的区别是什么时候交换
                int result = compareTo(arr[j], arr[j + 1]);
                if (result > 0) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
    }

    public abstract int compareTo(int i, int j);
}
class SortUtilDesc extends SortUtil{
    @Override
    public int compareTo(int i, int j) {
        return j-i;
    }
}